#!/bin/bash
# ThingsBoard 备份/恢复环境设置脚本
# 版本: 1.0.1 (MinIO支持)

# 切换到脚本目录
cd "$(dirname "$0")/.." || exit 1

# 导入共用函数
source ./common.sh

log_info "开始设置ThingsBoard备份/恢复环境..."

# 创建必要的目录结构
setup_backup_directories

# 安装系统依赖
log_info "安装系统依赖..."
apt-get update
apt-get install -y \
    curl \
    jq \
    tar \
    gzip \
    mail \
    postgresql-client \
    cron

# 检查WAL-G是否已安装
if ! command -v wal-g &> /dev/null; then
    log_info "WAL-G未安装，开始安装..."
    bash ./install/install_walg.sh
else
    log_info "WAL-G已安装，跳过安装步骤"
    wal-g --version
fi

# 检查MinIO配置
log_info "验证MinIO配置..."
if [ -z "$MINIO_HOST" ] || [ -z "$MINIO_PORT" ] || [ -z "$MINIO_USER" ] || [ -z "$MINIO_PASSWORD" ] || [ -z "$MINIO_BUCKET" ]; then
    log_warn "MinIO配置不完整，请检查config/backup_env.conf中的MinIO配置"
    log_warn "备份系统将使用本地文件系统作为备份目标"
else
    # 尝试连接MinIO服务器
    log_info "尝试连接MinIO服务器: $MINIO_HOST:$MINIO_PORT..."
    if curl -s "http://$MINIO_HOST:$MINIO_PORT/minio/health/live" > /dev/null; then
        log_success "MinIO服务器连接成功"
    else
        log_warn "无法连接到MinIO服务器，请确保MinIO服务已启动并且配置正确"
        log_warn "备份系统将继续设置，但可能无法正常使用MinIO存储功能"
    fi
fi

# 创建备份配置文件
log_info "创建备份配置文件..."

# 创建定时任务脚本目录
CRON_DIR="/etc/cron.d"
check_directory "$CRON_DIR"

# 创建全量备份定时任务
log_info "创建定时备份任务..."
cat > "$CRON_DIR/thingsboard-backup" <<EOF
# ThingsBoard 定时备份任务

# 每周日凌晨2:00执行全量备份
0 2 * * 0 root $(pwd)/backup/backup_full.sh > /dev/null 2>&1

# 每天凌晨3:00执行增量备份 (周日除外)
0 3 * * 1-6 root $(pwd)/backup/backup_diff.sh > /dev/null 2>&1

# 每天凌晨4:00执行备份清理
0 4 * * * root $(pwd)/backup/retention.sh > /dev/null 2>&1

# 每小时检查WAL归档
0 * * * * root $(pwd)/monitoring/healthcheck.sh > /dev/null 2>&1
EOF

log_info "定时备份任务已创建: $CRON_DIR/thingsboard-backup"

# 重新加载crond配置
log_info "重新加载cron配置..."
systemctl restart cron

# 设置首次全量备份
log_info "是否要立即执行首次全量备份? (y/n)"
read -r answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
    log_info "执行首次全量备份..."
    bash ./backup/backup_full.sh
else
    log_info "跳过首次全量备份"
fi

log_info "ThingsBoard备份/恢复环境设置完成"

# 显示备份设置摘要
cat <<EOF

=============================================
ThingsBoard备份/恢复环境设置摘要
=============================================
备份基础目录: $BACKUP_BASE_DIR
PostgreSQL容器: $POSTGRES_CONTAINER_NAME
ThingsBoard服务模式: $SERVICE_MODE
WAL归档启用: $WAL_ARCHIVE_ENABLED
定时任务配置: $CRON_DIR/thingsboard-backup

MinIO对象存储配置:
  服务器: $MINIO_HOST:$MINIO_PORT
  存储桶: $MINIO_BUCKET
  全量备份前缀: $MINIO_FULL_PREFIX
  增量备份前缀: $MINIO_DIFF_PREFIX
=============================================

备份设置完成！请检查以上配置是否正确。
如需修改配置，请编辑: $CONFIG_FILE

查看更多信息，请阅读: docs/backup_restore_guide.md
EOF
